'use strict';

const Controller = require('egg').Controller;
const fs = require('fs')
const path = require('path')
const frs = require('../utils/formatResponse')
const Mimes = require('../utils/mime')
const {verifyAudio} = require('../utils/verify')
const mm = require('music-metadata');
const util = require('util');
import { FileDecoder } from 'flac-bindings'

class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    ctx.body = 'hi, egg';
  }
  // 返回指定路径下目录文件
  async getFileList(){
    const {ctx, service} = this
    const path = ctx.query.path
    if(!path){
      ctx.body = frs(405,'请传入文件目录')
      ctx.status = 405
      return 
    }
    
    if(!fs.existsSync(path)) return frs(404,'路径或文件不存在')

    // 读取目录
    try {
      let arr = []
      let res = fs.readdirSync(path,{withFileTypes:true})
      // 遍历读取文件信息
      for(let i = 0; i < res.length; i++){
        // 单文件名称
        let filepath = path + '/' + res[i].name
        // 过滤非音频文件
        if(!verifyAudio(filepath)) continue
        // 文件信息
        let resFile = fs.lstatSync(filepath)
        // 读取元数据
        // const metadata = await mm.parseFile(filepath);
        // 合并文件信息及添加文件类型
        arr.push(Object.assign(
          res[i], 
          resFile, 
          // metadata, 
          {isDir: resFile.isDirectory()}
        ))
      }
      ctx.body = frs(200,undefined,{path,list: arr})
    } catch (error) {
      this.logger.error(error)
      console.log(error,'error')
      ctx.body = frs(410,'error', error)
      ctx.status = 410
    }
  }
  // 获取文件详情
  async getFileDetail(){
    const {ctx, service} = this
    const path = ctx.query.path
    if(!path){
      ctx.body = frs(405,'请传入文件目录')
      ctx.status = 405
      return 
    }
    if(!fs.existsSync(path)){
      ctx.body = frs(404,'路径或文件不存在')
      ctx.status = 404
      return 
    }
    // 读取文件
    try {
      // 文件详细信息
      const file = fs.statSync(path)
      // 判断是否是文件
      if(file.isDirectory()){
        ctx.body = frs(405,'请传入文件类型')
        ctx.status = 405
        return 
      }
      // 判断文件格式
      const ept = path.split('/').splice(-1)[0].split('.')[1]
      if(!Mimes[ept]){
        ctx.body = frs(410,'不支持的文件格式')
        ctx.status = 410
        return 
      }

      ctx.set('content-type', Mimes[ept])
      ctx.body = fs.createReadStream(path)

      

      // const metadata = await mm.parseFile(path);
      // ctx.body = util.inspect(metadata, { showHidden: false, depth: null })


      // const metadata = await mm.parseFile(path);
      // ctx.set('content-type', Mimes[ept])
      // ctx.body = util.inspect(metadata, { showHidden: false, depth: null })
      
    } catch (error) {
      this.logger.error(error)
      console.log(error,'error')
      ctx.body = frs(410,'error', error)
      ctx.status = 410
    }
  }
}

module.exports = HomeController;
  